]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
XDND: Don't reset switch timeout when pointer is over the same window
authorAdel Gadllah <adel.gadllah@gmail.com>
Fri, 7 Jan 2011 10:12:00 +0000 (11:12 +0100)
committerAdel Gadllah <adel.gadllah@gmail.com>
Thu, 20 Jan 2011 08:57:50 +0000 (09:57 +0100)
Currently we reset the timeout on every mouse movement which means
the user has to keep the mouse at the exact same position for 1.25
seconds.

Be more tolerant and allow the user to move the mouse over the
window without reseting the timeout, which should make activating
windows easier.

https://bugzilla.gnome.org/show_bug.cgi?id=638896

js/ui/overview.js

index 353d769e807449bf43ec28d37bea70063ecfbb73..7aa24237ea179b42f415ebb95dbd5ec3d6196f7f 100644 (file)
@@ -167,6 +167,7 @@ Overview.prototype = {
         this._windowSwitchTimeoutId = 0;
         this._windowSwitchTimestamp = 0;
         this._lastActiveWorkspaceIndex = -1;
+        this._lastHoveredWindow = null;
         this._needsFakePointerEvent = false;
 
         this.workspaces = null;
@@ -186,7 +187,7 @@ Overview.prototype = {
             global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
             this.hideTemporarily();
         }
-
+        this._lastHoveredWindow = null;
         DND.removeMonitor(this._dragMonitor);
     },
 
@@ -200,15 +201,24 @@ Overview.prototype = {
     },
 
     _onDragMotion: function(dragEvent) {
+        let targetIsWindow = dragEvent.targetActor &&
+                             dragEvent.targetActor._delegate &&
+                             dragEvent.targetActor._delegate.metaWindow;
+
+        if (targetIsWindow &&
+            dragEvent.targetActor._delegate.metaWindow == this._lastHoveredWindow)
+            return;
+        else
+            this._lastHoveredWindow = null;
+
         if (this._windowSwitchTimeoutId != 0) {
             Mainloop.source_remove(this._windowSwitchTimeoutId);
             this._windowSwitchTimeoutId = 0;
             this._needsFakePointerEvent = false;
         }
 
-        if (dragEvent.targetActor &&
-            dragEvent.targetActor._delegate &&
-            dragEvent.targetActor._delegate.metaWindow) {
+        if (targetIsWindow) {
+            this._lastHoveredWindow = dragEvent.targetActor._delegate.metaWindow;
             this._windowSwitchTimestamp = global.get_current_time();
             this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT,
                                             Lang.bind(this, function() {
@@ -216,6 +226,7 @@ Overview.prototype = {
                                                 Main.activateWindow(dragEvent.targetActor._delegate.metaWindow,
                                                                     this._windowSwitchTimestamp);
                                                 this.hideTemporarily();
+                                                this._lastHoveredWindow = null;
                                             }));
         }